package com.zijidelu.luframework.infrastructure.persistence.repository.core.criteria;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zijidelu.luframework.base.model.PO;

/**
 * MyBatis数据仓库接口。
 * <p>
 * 不建议越过repository层直接操作数据库。
 *
 * @author ZIJIDELU
 * @datetime 2025/10/18 11:54
 */
public interface PersistenceContext<P extends PO> {
    /**
     * 获取MybatisPlus服务。
     *
     * @return MybatisPlus服务
     */
    IService<P> getMybatisPlusService();

    /**
     * 获取函数式基础查询器。
     *
     * @return 函数式查询器
     */
    LambdaQueryWrapper<P> getBaseLambdaQueryWrapper();

    /**
     * 获取函数式基础链式查询器。
     *
     * @return 函数式链式查询器
     */
    LambdaQueryChainWrapper<P> getBaseLambdaQueryChainWrapper();

    /**
     * 获取基础查询器。
     *
     * @return 查询器
     */
    QueryWrapper<P> getBaseQueryWrapper();

    /**
     * 获取基础链式查询器。
     *
     * @return 链式查询器
     */
    QueryChainWrapper<P> getBaseQueryChainWrapper();

    /**
     * 获取基础更新器。
     *
     * @return 更新器
     */
    UpdateChainWrapper<P> getBaseUpdateChainWrapper();

    /**
     * 获取链式更新器。
     *
     * @return 链式更新前
     */
    LambdaUpdateChainWrapper<P> getBaseLambdaUpdateChainWrapper();

}
